package knihaprichodu;

import knihaprichodu.frm.ChyboveOkno;
import java.io.*;

/**
 * Trida na vypocitani prescasu z knihy
 *
 * @author Pavel Petrus
 */
public class VypocetPrescasu {

    private ChyboveOkno chO = new ChyboveOkno();

    /**
     * Metoda na nacitani zaznamu z knihy a vypocet pracovni doby pro jednotlive dny
     *
     * @param jmeno - String jmeno souboru knihy
     * @return - int[2] pocet hodin, minut rozdilu mezi stand. pracovni dobou a realitou
     */
    public int[] nactiUdaj(String jmeno) {
        File frJmeno = new File(jmeno);
        FileReader fr = null;
        BufferedReader in;
        String radka, pom;
        String[] data2;
        int[] P = new int[2], O = new int[2]; //pomocny prichod a odchod
        int[] roz = new int[2]; //rozdily casu pro kazdy den
        int[] suma = new int[2]; //vysledny pocet hodin a minut "prescasu"
        int pocetDni;
        int hod, min;
        final int[] pracDoba = {8, 30}; //standardni pracovni doba je 8.5 hodiny

        pocetDni = 0;
        P[0] = -1;
        P[1] = -1;
        O[0] = -1;
        O[1] = -1;
        roz[0] = 0;
        roz[1] = 0;
        suma[0] = 0;
        suma[1] = 0;

        try {
            if (frJmeno.exists() == true) {
                fr = new FileReader(frJmeno);
                in = new BufferedReader(fr);
                pom = "a"; // aby na startu nebyla nulova
                radka = "a";

                //nacitani souboru po radce
                while (pom != null) {
                    pom = in.readLine();

                    if (pom != null) { //osetreni nebot je \n na konci souboru
                        radka = pom;
                        data2 = radka.split(" ");
                        if (data2[0].equalsIgnoreCase("Prichod")) {
                            P[0] = Integer.parseInt(data2[4]); //ulozeni hodin prichodu
                            P[1] = Integer.parseInt(data2[5]);
                        } else {
                            O[0] = Integer.parseInt(data2[4]); //ulozeni hodin odchodu
                            O[1] = Integer.parseInt(data2[5]);
                            roz = spoctiRozdil(P, O); //vypocet rozdilu casu pro dany den
                            suma[0] += roz[0]; // nacitani rozdilu hodin
                            suma[1] += roz[1]; // a minut
                            pocetDni++;
                        }
                    }
                }
                in.close();
            } else {
                System.out.println("Neni soubor pro cteni!");
                chO.getChyba().setText("Soubor \"Kniha.txt\" byl smazan ci umisten jinam!");
                chO.setVisible(true);
            }

        } catch (IOException e) {
            System.out.println("Neslo mi to nacist!");
            chO.getChyba().setText("Prestante rucne editovat soubor \"Kniha.txt\"!");
            chO.setVisible(true);
        }

        //vlastni vypocet prescasu
        suma[0] = suma[0] - pocetDni * pracDoba[0];
        suma[1] = suma[1] - pocetDni * pracDoba[1];
        //   System.out.println("Suma " + suma[0] + " " + suma[1]);

        //prevedeni do smysluplnejsi podoby s minutami vzdy kladnymi
        hod = suma[1] / 60; //celociselne deleni
        suma[1] = suma[1] - hod * 60;
        if (suma[1] >= 0) { //minuty jsou kladne
            suma[0] = suma[0] + hod;
        } else {
            suma[1] = suma[1] + 60;
            suma[0] = suma[0] + hod - 1;
        }

        return suma;
    }

    /**
     * Metoda na vypocitani rozdilu casu mezi prichodem a odchodem
     *
     * @param P - int[2] - prichod v hodinach, minutach
     * @param O - int[2] - odchod v hodinach, minutach
     * @return - int[2] - rozdil hodin, rozdil minut
     */
    public int[] spoctiRozdil(int[] P, int[] O) {
        int[] rozdil = new int[2];
        if ((P[1] - O[1]) >= 0) {
            rozdil[1] = (O[1] - P[1]); //rozdil minut
            rozdil[0] = (O[0] - P[0]); //rozdil hodin
        } else {
            rozdil[1] = 60 - P[1] + O[1];
            rozdil[0] = O[0] - P[0] - 1; //nebot rozdil minut je zaporny
        }
        return rozdil;
    }
}
